import 'package:flutter/material.dart';
import 'package:flutter_pink_app/composables/video_row.dart';
import 'package:flutter_pink_app/serialized/recommend.dart';
import 'package:flutter_pink_app/style/text.dart';
import "../style/color.dart";
import "../business/get_favourites.dart";

// bili收藏页面
class BiliFavouritePage extends StatefulWidget {
  @override
  _BiliFavouritePageState createState() => _BiliFavouritePageState();
}

class _BiliFavouritePageState extends State<BiliFavouritePage> {
  final List<VideoInfo> _dataList = []; // 渲染数据列表
  final int _updateAmount = 10; // 一次更新数量
  int _currPageIndex = 1; // 当前页码
  bool _isRenderComplete = false; // 服务端数据是否渲染完毕

  // 初始化生命周期
  @override
  void initState() {
    super.initState();
    _loadVideoRequest();
  }

  // 废弃生命周期
  @override
  void dispose() {
    print("收藏页销毁");
    super.dispose();
  }

  // 初始化请求函数
  Future<void> _loadVideoRequest() async {
    // pageIndex的索引开始于1
    final res = await getFavouritesList(
        pageIndex: _currPageIndex, pageSize: _updateAmount); // 远程请求数据
    // 如果请求数据为空说明发生错误，直接返回
    if (res == null) {
      return;
    }
    // 如果页面仍挂载中且存在课加载数据，则加入渲染数据列表
    if (mounted && res.list.length > 0) {
      setState(() {
        _dataList.addAll(res.list);
        _updateIndex(res.total); // 更新计数索引
      });
    }
  }

  // 计算数量更新
  void _updateIndex(int count) {
    if (count == _dataList.length) {
      print("服务端数据已加载完毕");
      _isRenderComplete = true;
    }
    _currPageIndex++;
  }

  // 滚动列表底部元素
  Widget _buildListBottom(bool isNotRender) {
    return Offstage(
      offstage: isNotRender,
      child: Container(
        alignment: Alignment.center,
        // color: Colors.grey[100],
        height: 36,
        child: Text(
          "再怎么刷新也没有啦~",
          style: normalGrayStyle,
        ),
      ),
    );
  }

  // 构造视频列表
  ListView _buildVideoList() {
    return ListView.builder(
        physics: const BouncingScrollPhysics(
            parent: AlwaysScrollableScrollPhysics()),
        itemCount: _dataList.length + 1,
        itemBuilder: (_, index) {
          // 判断是否到达渲染底部
          if (index == _dataList.length) {
            // 到达底部则先进行远程请求，根据数据是否增多判断隐藏服务端数据是否渲染完成
            print("调用了");
            _loadVideoRequest();
            return _buildListBottom(!_isRenderComplete);
          } else {
            return VideoRow(_dataList[index]);
          }
        });
  }

  // 重新刷新列表函数
  Future<void> _refreshPage() {
    // 重置计数
    _currPageIndex = 1;
    _isRenderComplete = false;
    // 清空数据列表
    setState(() {
      _dataList.clear();
    });
    return _loadVideoRequest();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
          title: Text('我的收藏', style: normalInputStyle),
          shadowColor: lightGrayTextColor,
          centerTitle: true),
      body: RefreshIndicator(
          color: mainThemeColor,
          onRefresh: () => _refreshPage(),
          child: _buildVideoList()),
    );
  }
}
